//данная программа берет файл библиотеки binfile5vf.mbf (все функции от 5 переменных и их сложности)
//и создает файл библиотеки binfile5v_n.mbf (все классы N (отрицания) и их сложности)

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <queue>

using namespace std;

#include "binfile.h"
#include "both.h"


struct NPLib {
  Int32 f;
  Int8 comp;
  bool mark;
};

vector<NPLib> npLib;
Int64 fCount, fHalfMask;
Int8 fLen, n;
vector<bool> MarkArray;

BinFile writer, reader;

inline void MarkClassBy(const Int64 f) {
      Int32 fTmp = f;
      for(Int8 j = 0; j < Gray.size(); j++) {
        if (j != 0) fTmp = negbyvar(fTmp, Gray[j], n);
        MarkArray[fTmp] = true;
      }
}

inline void LoadInfo() {
  ostringstream oss;
  fLen = 1 << n;
  fCount = (Int64)1 << fLen;
  MarkArray.resize(fCount);

  fHalfMask = ((Int64)1 << (fLen >> 1)) - 1;

  oss << "binfile" << (int)n << "vf.mbf";
  reader.open(oss.str(), BIN_FILE_READ);
  
  oss.str("");
  oss << "binfile" << (int)n << "v_n.mbf";
  writer.open(oss.str(), BIN_FILE_WRITE);
  MakeAddArrays(n);

  cout << "Writing!" << endl;
}

inline void SaveInfo(const Int64 f, const Int8 fComp) {
  writer.write((Int32)f);
  writer.write(fComp);
}

int main () {
  n = 5;
  LoadInfo();
  
  Int32 f = 0;
  Int8 fComp;
  do {
    reader.read(fComp);
    if (!MarkArray[f]) {
      MarkClassBy(f);
      SaveInfo(f,fComp);
    }
    f++;
  } while(f != 0);
  
  
  return 0;
}
